package com.quaidi.smartlocker.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;

import java.time.LocalDateTime;

/**
 * 快递包裹实体类
 * 
 * @author QuaiDi
 * @since 2025-08-26
 */
@TableName("express_package")
public class ExpressPackage extends BaseEntity {

    /**
     * 快递单号
     */
    @TableField("tracking_number")
    private String trackingNumber;

    /**
     * 取件码
     */
    @TableField("pickup_code")
    private String pickupCode;

    /**
     * 寄件人姓名
     */
    @TableField("sender_name")
    private String senderName;

    /**
     * 寄件人电话
     */
    @TableField("sender_phone")
    private String senderPhone;

    /**
     * 收件人姓名
     */
    @TableField("recipient_name")
    private String recipientName;

    /**
     * 收件人电话
     */
    @TableField("recipient_phone")
    private String recipientPhone;

    /**
     * 收件人地址
     */
    @TableField("recipient_address")
    private String recipientAddress;

    /**
     * 快递公司ID
     */
    @TableField("express_company_id")
    private Long expressCompanyId;

    /**
     * 柜格ID
     */
    @TableField("compartment_id")
    private Long compartmentId;

    /**
     * 包裹状态：DEPOSITED-已存放，PICKED_UP-已取走，EXPIRED-已过期
     */
    @TableField("package_status")
    private String packageStatus;

    /**
     * 存放时间
     */
    @TableField("deposit_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime depositTime;

    /**
     * 取件时间
     */
    @TableField("pickup_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime pickupTime;

    /**
     * 过期时间
     */
    @TableField("expire_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime expireTime;

    // Getter and Setter methods
    public String getTrackingNumber() {
        return trackingNumber;
    }

    public void setTrackingNumber(String trackingNumber) {
        this.trackingNumber = trackingNumber;
    }

    public String getPickupCode() {
        return pickupCode;
    }

    public void setPickupCode(String pickupCode) {
        this.pickupCode = pickupCode;
    }

    public String getSenderName() {
        return senderName;
    }

    public void setSenderName(String senderName) {
        this.senderName = senderName;
    }

    public String getSenderPhone() {
        return senderPhone;
    }

    public void setSenderPhone(String senderPhone) {
        this.senderPhone = senderPhone;
    }

    public String getRecipientName() {
        return recipientName;
    }

    public void setRecipientName(String recipientName) {
        this.recipientName = recipientName;
    }

    public String getRecipientPhone() {
        return recipientPhone;
    }

    public void setRecipientPhone(String recipientPhone) {
        this.recipientPhone = recipientPhone;
    }

    public String getRecipientAddress() {
        return recipientAddress;
    }

    public void setRecipientAddress(String recipientAddress) {
        this.recipientAddress = recipientAddress;
    }

    public Long getExpressCompanyId() {
        return expressCompanyId;
    }

    public void setExpressCompanyId(Long expressCompanyId) {
        this.expressCompanyId = expressCompanyId;
    }

    public Long getCompartmentId() {
        return compartmentId;
    }

    public void setCompartmentId(Long compartmentId) {
        this.compartmentId = compartmentId;
    }

    public String getPackageStatus() {
        return packageStatus;
    }

    public void setPackageStatus(String packageStatus) {
        this.packageStatus = packageStatus;
    }

    public LocalDateTime getDepositTime() {
        return depositTime;
    }

    public void setDepositTime(LocalDateTime depositTime) {
        this.depositTime = depositTime;
    }

    public LocalDateTime getPickupTime() {
        return pickupTime;
    }

    public void setPickupTime(LocalDateTime pickupTime) {
        this.pickupTime = pickupTime;
    }

    public LocalDateTime getExpireTime() {
        return expireTime;
    }

    public void setExpireTime(LocalDateTime expireTime) {
        this.expireTime = expireTime;
    }
}